/*
 *  listar_comentarios_response.cpp
 *  Wilson
 *
 *  Created by Sebastian Orfino on 1/5/12.
 *  Copyright 2012 lbs3. All rights reserved.
 *
 */
#include "VCPlugInHeaders.h"

//project include
#include "pugixml.hpp"
#include "base64.h"

//stl includes
#include <string>
#include <functional>
#include <algorithm>
#include <sstream>

#include "listar_comentarios_response.h"

using namespace pugi;
using namespace std;
using namespace eventos;
using namespace xmp;

namespace  {
	
	std::string& envolver_cdata(std::string& text)
	{
		
		return text;
	}
	
	/** Esta clase te construye el payload de este mensaje a partir de una coleccion de notas */
	class generar_payload : public std::unary_function<xmp::info_comentario_t,void> {
		
		
		pugi::xml_document& doc;
		pugi::xml_node coms_n;
		
	public:
		
		generar_payload(pugi::xml_document& d);
		void operator()(const xmp::info_comentario_t& nota);		
		
	};
	
	
	generar_payload::generar_payload(pugi::xml_document& d) : doc(d)
	{
		doc.load("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><payload></payload>");
		pugi::xml_node payload_n = doc.child("payload");
		payload_n.append_attribute("mensaje") = kEventoListarComentariosResponse;
		
		coms_n = payload_n.append_child(info_comentario_t::bag_tag());
		
	}
	
	void generar_payload::operator()(const xmp::info_comentario_t& comentario)
	{
		using namespace pugi;
		
		xml_node com_n = coms_n.append_child(info_comentario_t::tag());
		
		//xml_node id_n = com_n.append_child(info_comentario_t::id_tag());
		xml_node creador_n = com_n.append_child(info_comentario_t::creador_tag());
		xml_node timestamp_n = com_n.append_child(info_comentario_t::cuando_tag());
		xml_node texto_n = com_n.append_child(info_comentario_t::texto_tag());
		xml_node id_nota_n = com_n.append_child(info_comentario_t::id_nota_tag());
		xml_node id_n = com_n.append_child(info_comentario_t::id_tag());
				
		//id_n.append_child(node_pcdata).set_value(comentario.id.c_str());
		creador_n.append_child(node_pcdata).set_value(comentario.creador.c_str());
		timestamp_n.append_child(node_pcdata).set_value(comentario.cuando.c_str());
		texto_n.append_child(node_cdata).set_value( comentario.texto.c_str());
		id_nota_n.append_child(node_pcdata).set_value(comentario.id_nota.c_str());
		id_n.append_child(node_pcdata).set_value(comentario.id.c_str());
		
	}
}



std::string listar_comentarios_response::payload() const 
{
	
	using namespace std;
	
	pugi::xml_document doc;
	//PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;
	for_each(comentarios_.begin(),comentarios_.end(),generar_payload(doc)); 
	
	std::ostringstream ostr;
	doc.save(ostr,PUGIXML_TEXT("\t"), pugi::format_default, pugi::encoding_utf8);
	return ostr.str(); 
	
}
